package pe.gob.osinergmin.interfase_siaf.dac.ingreso.service.impl;

import java.util.List;
import java.util.Map;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import pe.gob.osinergmin.interfase_siaf.dac.common.dao.IntfCabDao;
import pe.gob.osinergmin.interfase_siaf.dac.common.dao.IntfDet09Dao;
import pe.gob.osinergmin.interfase_siaf.dac.common.dao.IntfNotDao;
import pe.gob.osinergmin.interfase_siaf.dac.dao.BancoDao;
import pe.gob.osinergmin.interfase_siaf.dac.dao.CicloDao;
import pe.gob.osinergmin.interfase_siaf.dac.dao.CtaCteDao;
import pe.gob.osinergmin.interfase_siaf.dac.dao.ExpedienteIngresoDao;
import pe.gob.osinergmin.interfase_siaf.dac.dao.FaseDao;
import pe.gob.osinergmin.interfase_siaf.dac.dao.FuenteFinancDao;
import pe.gob.osinergmin.interfase_siaf.dac.dao.MaestroClasificadorDao;
import pe.gob.osinergmin.interfase_siaf.dac.dao.MaestroDetalleDao;
import pe.gob.osinergmin.interfase_siaf.dac.dao.MaestroDocumentoDao;
import pe.gob.osinergmin.interfase_siaf.dac.dao.OrigenDao;
import pe.gob.osinergmin.interfase_siaf.dac.domain.Area;
import pe.gob.osinergmin.interfase_siaf.dac.domain.Banco;
import pe.gob.osinergmin.interfase_siaf.dac.domain.ControlCoa;
import pe.gob.osinergmin.interfase_siaf.dac.domain.CtaCte;
import pe.gob.osinergmin.interfase_siaf.dac.domain.CtbConfigRbXCgXTfinanc;
import pe.gob.osinergmin.interfase_siaf.dac.domain.Ejecutora;
import pe.gob.osinergmin.interfase_siaf.dac.domain.ExpedienteIngreso;
import pe.gob.osinergmin.interfase_siaf.dac.domain.FuenteFinanc;
import pe.gob.osinergmin.interfase_siaf.dac.domain.MaestroClasificador;
import pe.gob.osinergmin.interfase_siaf.dac.domain.MaestroDetalle;
import pe.gob.osinergmin.interfase_siaf.dac.domain.MaestroDocumento;
import pe.gob.osinergmin.interfase_siaf.dac.domain.Mes;
import pe.gob.osinergmin.interfase_siaf.dac.domain.Origen;
import pe.gob.osinergmin.interfase_siaf.dac.domain.interfase.IntfCab;
import pe.gob.osinergmin.interfase_siaf.dac.domain.interfase.IntfDet09;
import pe.gob.osinergmin.interfase_siaf.dac.domain.interfase.IntfNot;
import pe.gob.osinergmin.interfase_siaf.dac.ingreso.service.ValidacionIngresoService;
import pe.gob.osinergmin.interfase_siaf.dac.util.Constantes;

@Service("validacionIngresoService")
public class ValidacionIngresoServiceImpl implements ValidacionIngresoService {
	
	private final Log logger = LogFactory.getLog(getClass());
	
	public static final String CODIGO_VERIFICACION_OK ="1";
	public static final String CODIGO_VERIFICACION_ERROR ="0";
	public static final String ESTADO_ENVIO_P ="P";
	public static final String ESTADO_ENVIO_N ="N";
	public static final String ESTADO_ENVIO_R ="R";
	
	
	@Autowired
	private IntfCabDao intfCabDao;
	
	@Autowired
	private IntfDet09Dao intfDet09Dao;
	
	@Autowired
	private IntfNotDao intfNotDao;	
	
	@Autowired
	private MaestroDocumentoDao  maestroDocumentoDao;
	
	@Autowired
	private MaestroDetalleDao maestroDetalleDao;
	
	@Autowired
	private CicloDao cicloDao;
	
	@Autowired
	private FaseDao faseDao;
	
	@Autowired
	private OrigenDao origenDao;
	
	@Autowired
	private FuenteFinancDao fuenteFinancDao;
	
	@Autowired
	private MaestroClasificadorDao maestroClasificadorDao;
	
	@Autowired
	private BancoDao bancoDao;
	
	@Autowired
	private CtaCteDao ctaCteDao;
	
	@Autowired
	private ExpedienteIngresoDao expedienteIngresoDao;
	
	
	/*******VALIDACION PARA INGRESOS DETERMINADO (I-D)******/
	
	@Override	
	public String validarIngresosD(Map<String, Object> params) throws Exception {
		 String  valor  = CODIGO_VERIFICACION_OK+"/"+""; 		
		 boolean flag = true;
		 try {
			 IntfCab i = (IntfCab) params.get("intfCab");   
		     @SuppressWarnings("unchecked")
			 List<IntfDet09> detLista = (List<IntfDet09>) params.get("listaDet");			 
			 IntfNot n = (IntfNot) params.get("intfNot");	
			 
			 /**VALIDACION DE CAMPOS DE INTF_CAB**/
			 logger.info("Secuencial :"+i.getSecuencial());			
			 int  cab = intfCabDao.verificarSecuencialCab(i);
			 if(cab > 0){			
				 valor = Constantes.COD_SECUENCIAL_EXISTE_INTF_CAB+"/"+ 
			             Constantes.SECUENCIAL_EXISTE_INTF_CAB;
				flag =false;
			 }			
			if(flag){
				 Ejecutora e = new Ejecutora();
				 e.setAnoEje(i.getAnoEje()); 
				 int  anoEje  = maestroDetalleDao.verificarAnoEje(e);				
				 if(anoEje ==0){					
					valor =  Constantes.COD_ANO_EJE_NO_EXISTE_INTF_CAB+"/"+
				             Constantes.ANO_EJE_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	
			}	
			if(flag){
				 Ejecutora e = new Ejecutora();
				 e.setSecEjec(i.getSecEjec()); 
			     int  secEje  = maestroDetalleDao.verificarSecEje(e);				
				 if(secEje==0){					
					 valor = Constantes.COD_SEC_EJEC_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.SEC_EJEC_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }					
			}
			if(flag){
				 Ejecutora e = new Ejecutora();
				 e.setSecEjec(i.getSecEjec2()); 
			     int  secEje  = maestroDetalleDao.verificarSecEje(e);				
				 if(secEje==0){					
					valor = Constantes.COD_SEC_EJEC2_NO_EXISTE_INTF_CAB+"/"+
					        Constantes.SEC_EJEC2_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }			
			}
			if(flag){
				 Mes m = new Mes();
				 m.setMesEje(i.getMesEje()); 
				 int  mesEje  = maestroDetalleDao.verificarMesEje(m);				
				 if(mesEje ==0){					
					 valor = Constantes.COD_MES_EJE_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.MES_EJE_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}
			if(flag){
				 MaestroDetalle m = new MaestroDetalle();
				 m.setCodDetall(i.getTipoOpe()); 
				 int  tipoOpe  = maestroDetalleDao.verificarTipoOpe(m);			
				 if(tipoOpe==0){					
					 valor = Constantes.COD_TIPO_OPE_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.TIPO_OPE_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}
			if(flag){
				 MaestroDetalle m = new MaestroDetalle();
				 m.setCodDetall(i.getModComp()); 
				 int  modComp  = maestroDetalleDao.verificarModComp(m);			
				 if(modComp==0){					 
					 valor = Constantes.COD_MOD_COMP_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.MOD_COMP_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}			
			if(flag){
				 Area a = new Area();
				 a.setSecArea(i.getSecArea()); 
				 int  secArea  = maestroDetalleDao.verificarSecArea(a);		
				 if(secArea==0){					
					valor = Constantes.COD_SEC_AREA_NO_EXISTE_INTF_CAB+"/"+
					        Constantes.SEC_AREA_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}		
			if(flag){
				 MaestroDocumento m = new MaestroDocumento();
				 m.setCodDoc(i.getCodDoc()); 
				 int  codDoc  = maestroDocumentoDao.verificarCodDoc(m); 				
				 if(codDoc==0){					
					valor = Constantes.COD_COD_DOC_NO_EXISTE_INTF_CAB+"/"+
					        Constantes.COD_DOC_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}
			if(flag){
				 Origen o = new Origen();
				 o.setOrigen(i.getOrigen());
				 int  origen  = origenDao.verificarOrigen(o);	
				 if(origen==0){					
					valor = Constantes.COD_ORIGEN_NO_EXISTE_INTF_CAB+"/"+
					        Constantes.ORIGEN_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}
			if(flag){
				FuenteFinanc f = new FuenteFinanc();
				 f.setFuenteFin(i.getFteFin()); 
				 int  fteFin  = fuenteFinancDao.verificarFteFin(f);	
				 if(fteFin==0){					
					 valor = Constantes.COD_FTE_FIN_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.FTE_FIN_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}
			if(flag){
				CtbConfigRbXCgXTfinanc f = new CtbConfigRbXCgXTfinanc();
				 f.setAnoCtb(i.getAnoEje());
				 f.setFuenteFin(i.getFteFin());
				 f.setTipoFinan(i.getTipoFin()); 
				 int  tipofin  = fuenteFinancDao.verificarTipoFin(f);
				 if(tipofin==0){					
					 valor = Constantes.COD_TIPO_FIN_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.TIPO_FIN_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}		
			if(flag){
				 MaestroDetalle m = new MaestroDetalle();
				 m.setCodDetall(i.gettPago()); 
				 int  tPago  = maestroDetalleDao.verificarTPago(m);			
				 if(tPago==0){					
					valor = Constantes.COD_T_PAGO_NO_EXISTE_INTF_CAB+"/"+
					        Constantes.T_PAGO_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}
			if(flag){
				 MaestroDetalle m = new MaestroDetalle();
				 m.setCodDetall(i.gettRecurs()); 
				 int  tRecurs  = maestroDetalleDao.verificarTRecurs(m);			
				 if(tRecurs==0){					
					 valor = Constantes.COD_T_RECURS_NO_EXISTE_INTF_CAB+"/"+
					          Constantes.T_RECURS_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}
			if(flag){
				 MaestroDetalle m = new MaestroDetalle();
				 m.setCodDetall(i.gettCompro()); 
				 int  tCompro  = maestroDetalleDao.verificarTCompro(m);		
				 if(tCompro==0){					
					 valor = Constantes.COD_T_COMPRO_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.T_COMPRO_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}
			if(flag){
				 MaestroDetalle m = new MaestroDetalle();
				 m.setCodDetall(i.getMoneda()); 
				 int  moneda  = maestroDetalleDao.verificarMoneda(m);		
				 if(moneda==0){				
					valor = Constantes.COD_MONEDA_NO_EXISTE_INTF_CAB+"/"+
					        Constantes.MONEDA_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}		
			if(flag){					
				 if(!validarEstadoE(i.getUeEnvio())){			
					valor = Constantes.COD_UE_ENVIO_NO_EXISTE_INTF_CAB+"/"+
					        Constantes.UE_ENVIO_NO_EXISTE_INTF_CAB;
					 flag =false;					
				 }	 
			}			
			if(flag){				
				 if(!validarEstadoES(i.getUeEstado())){  					
					 valor =  Constantes.COD_UE_ESTADO_NO_EXISTE_INTF_CAB+"/"+
					          Constantes.UE_ESTADO_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}			
		
			//falta estado_reg
			 
			 /**VALIDACION DE CAMPOS DE INTF_DET09**/
			for(IntfDet09 d :detLista){
				 if(flag){
					 int  det  = intfDet09Dao.verificarSecuencialDet09(d);
					 if(det >0 && flag){						
						valor = Constantes.COD_SECUENCIAL_EXISTE_INTF_DET09+"/"+
						        Constantes.SECUENCIAL_EXISTE_INTF_DET09;
						 flag =false;
						 break;
					 }	 
				 }
				 if(flag){				
					 if(!d.getSecuencial().equals(i.getSecuencial())){					
						 valor = Constantes.COD_SECUENCIAL_NO_COINCIDE_INTF_DET09+"/"+
							     Constantes.SECUENCIAL_NO_COINCIDE_INTF_DET09;
						 flag =false;
						 break;
					 }	 
				 }
				 if(flag){
					 MaestroClasificador m = new MaestroClasificador();
					 m.setIdClasifi(d.getIdClasifi()); 
					 int  idClasifi  = maestroClasificadorDao.verificarIdClasifi(m);		
					 if(idClasifi==0){								
						 valor = Constantes.COD_ID_CLASIFI_NO_EXISTE_INTF_DET09+"/"+
							     Constantes.ID_CLASIFI_NO_EXISTE_INTF_DET09;
						 flag =false;
						 break;
					 }					
				} 
			   if(flag){
					 MaestroClasificador m = new MaestroClasificador();
					 m.setAnoEje(i.getAnoEje());
					 m.setClasificad(d.getClasifniv1()+d.getClasifniv2()+
							 " "+d.getClasifniv3()+" "+d.getClasifniv4()+
							 " "+d.getClasifniv5()+" "+d.getClasifniv6());
					 int  nivClasificad  = maestroClasificadorDao.verificarNivClasifi(m);		
					 if(nivClasificad==0){							
						 valor = Constantes.COD_CLASIFNIVELES_NO_EXISTE_INTF_DET09+"/"+
							     Constantes.CLASIFNIVELES_NO_EXISTE_INTF_DET09;
						 flag =false;
						 break;
					 }					
				} 		
			}//fin del for
			
			 /**VALIDACION DE CAMPOS DE INTF_NOT**/
			 if(flag){
				 int  not  = intfNotDao.verificarSecuencialNot(n);
				 if(not >0 && flag){						
					 valor = Constantes.COD_SECUENCIAL_EXISTE_INTF_NOT+"/"+
						     Constantes.SECUENCIAL_EXISTE_INTF_NOT;
					 flag =false;
				 }	 
			 }
			 if(flag){				
				 if(!n.getSecuencial().equals(i.getSecuencial())){						
					 valor = Constantes.COD_SECUENCIAL_NO_COINCIDE_INTF_NOT+"/"+
						     Constantes.SECUENCIAL_NO_COINCIDE_INTF_NOT;
					 flag =false;
				 }	 
			 }
			 if(flag){
				 ExpedienteIngreso e = new ExpedienteIngreso();
				 e.setCorrelativ(n.getCorrelativ());
				 int  idClasifi  = maestroDetalleDao.verificarCorrelativExpe(e);
				 if(idClasifi==0){						
					 valor = Constantes.COD_CORRELATIV_NO_EXISTE_INTF_NOT+"/"+
						     Constantes.CORRELATIV_NO_EXISTE_INTF_NOT;
					 flag =false;
				 }	 
			} 	
		} catch (Exception e) {		
			logger.info("Error al listar secuencial de la cab"+e); 			
			valor = CODIGO_VERIFICACION_ERROR+"/"+"";
		}		 
		 return valor;
	}
	
	/**validar determinado ampliacion*/
	
	@Override
	public String validarIngresosDAmpl(Map<String, Object> params) throws Exception {
		 String  valor  = CODIGO_VERIFICACION_OK+"/"+""; 
		 boolean flag = true;
		 try {
			 IntfCab i = (IntfCab) params.get("intfCab");   
		     @SuppressWarnings("unchecked")
			 List<IntfDet09> detLista = (List<IntfDet09>) params.get("listaDet");		
			 /*VALIDACION DE CAMPOS DE INTF_CAB I-D AMPLIACION**/
			 ExpedienteIngreso exp = new ExpedienteIngreso();
			 exp.setExpediente(i.getIntfExp()); 
			 exp.setFase(i.getIntfFase());
			 exp.setCorrelativ(i.getIntfCor());
			 exp.setSecuencia(i.getIntfSec());
			 exp.setAnoEje(i.getAnoEje());		 
			 exp.setCiclo(i.getCiclo()); 			 
			 
			 if(flag){				
				 int expeIngreso = expedienteIngresoDao.verificarExiteExpIngreso(exp);				
				 if(expeIngreso==0){ 
					 valor = Constantes.COD_EXISTE_DETERMINADO_PARA_AMPLIACION+"/"+
					         Constantes.EXISTE_DETERMINADO_PARA_AMPLIACION;
					 flag =false;
				 }	 
			}				
			if(flag){
				 int  cab = intfCabDao.verificarSecuencialCab(i);
				 if(cab >0){
					valor = Constantes.COD_SECUENCIAL_EXISTE_INTF_CAB+"/"+
							Constantes.SECUENCIAL_EXISTE_INTF_CAB;
					flag =false;
				 }		
			}
			if(flag){
				 Ejecutora e = new Ejecutora();
				 e.setAnoEje(i.getAnoEje()); 
				 int  anoEje  = maestroDetalleDao.verificarAnoEje(e);				
				 if(anoEje ==0){
					 valor = Constantes.COD_ANO_EJE_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.ANO_EJE_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}
			if(flag){
				 Ejecutora e = new Ejecutora();
				 e.setSecEjec(i.getSecEjec()); 
			     int  secEje  = maestroDetalleDao.verificarSecEje(e);				
				 if(secEje==0){
					 valor = Constantes.COD_SEC_EJEC_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.SEC_EJEC_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}		
			if(flag){
				 MaestroDocumento m = new MaestroDocumento();
				 m.setCodDoc(i.getCodDoc()); 
				 int  codDoc  = maestroDocumentoDao.verificarCodDoc(m); 				
				 if(codDoc==0){
					 valor = Constantes.COD_COD_DOC_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.COD_DOC_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}
			if(flag){					
				 if(!validarEstadoE(i.getUeEnvio())){ 					
					 valor = Constantes.COD_UE_ENVIO_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.UE_ENVIO_NO_EXISTE_INTF_CAB;
					 flag =false;					
				 }	 
			}			
			if(flag){				
				 if(!validarEstadoES(i.getUeEstado())){  
					 valor = Constantes.COD_UE_ESTADO_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.UE_ESTADO_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}
			
			 /*VALIDACION DE CAMPOS DE INTF_DET09 I-D AMPLIACION**/
			for(IntfDet09 d :detLista){
				if(flag){
					 int  det  = intfDet09Dao.verificarSecuencialDet09(d);
					 if(det >0 && flag){
						 valor = Constantes.COD_SECUENCIAL_EXISTE_INTF_DET09+"/"+
						         Constantes.SECUENCIAL_EXISTE_INTF_DET09;
						 flag =false;
						 break;
					 }	 
				 }
				 if(flag){				
					 if(!i.getSecuencial().equals(d.getSecuencial())){
						 valor = Constantes.COD_SECUENCIAL_NO_COINCIDE_INTF_DET09+"/"+
						         Constantes.SECUENCIAL_NO_COINCIDE_INTF_DET09;
						 flag =false;
						 break;
					 }	 
				 }
				 if(flag){
					 MaestroClasificador m = new MaestroClasificador();
					 m.setIdClasifi(d.getIdClasifi()); 
					 int  idClasifi  = maestroClasificadorDao.verificarIdClasifi(m);		
					 if(idClasifi==0){
						 valor = Constantes.COD_ID_CLASIFI_NO_EXISTE_INTF_DET09+"/"+
						         Constantes.ID_CLASIFI_NO_EXISTE_INTF_DET09;
						 flag =false;
						 break;
					 }	 
				} 	
			   if(flag){
					 MaestroClasificador m = new MaestroClasificador();
					 m.setAnoEje(i.getAnoEje());
					 m.setClasificad(d.getClasifniv1()+d.getClasifniv2()+
							 " "+d.getClasifniv3()+" "+d.getClasifniv4()+
							 " "+d.getClasifniv5()+" "+d.getClasifniv6());
					 int  nivClasificad  = maestroClasificadorDao.verificarNivClasifi(m);		
					 if(nivClasificad==0){
						 valor = Constantes.COD_CLASIFNIVELES_NO_EXISTE_INTF_DET09+"/"+
						         Constantes.CLASIFNIVELES_NO_EXISTE_INTF_DET09;
						 flag =false;
						 break;
					 }					
				}			
			}//fin del for			 
		} catch (Exception e) {			
			logger.info("Error validar determinado ampliacion "+e); 
			valor = CODIGO_VERIFICACION_ERROR+"/"+"";
		}		 
		 return valor;
	}
	
	
   /**validar determinado rebaja*/
	
	@Override
	public String validarIngresosDRebaja(Map<String, Object> params) throws Exception {
		 String  valor  = CODIGO_VERIFICACION_OK+"/"+""; 
		 boolean flag = true;
		 try {
			 IntfCab i = (IntfCab) params.get("intfCab");   
		     @SuppressWarnings("unchecked")
			 List<IntfDet09> detLista = (List<IntfDet09>) params.get("listaDet");
		     double montoTotal = (Double)params.get("montoTotal")*(-1);
		     double montoMnTotal = (Double)params.get("montoMnTotal")*(-1);
		     
			 /*VALIDACION DE CAMPOS DE INTF_CAB I-D REBAJA**/
			 ExpedienteIngreso exp = new ExpedienteIngreso();		 
			 exp.setExpediente(i.getIntfExp()); 
			 exp.setFase(i.getIntfFase());
			 exp.setCorrelativ(i.getIntfCor());
			 exp.setSecuencia(i.getIntfSec());
			 exp.setAnoEje(i.getAnoEje());		 
			 exp.setCiclo(i.getCiclo()); 			 
			 
			 if(flag){				
				 int expeIngreso = expedienteIngresoDao.verificarExiteExpIngreso(exp);				
				 if(expeIngreso==0){ 
					 valor = Constantes.COD_EXISTE_DETERMINADO_PARA_REBAJA+"/"+
					         Constantes.EXISTE_DETERMINADO_PARA_REBAJA;
					 flag =false;
				 }	 
			}			
			if(flag){
				 int  cab = intfCabDao.verificarSecuencialCab(i);
				 if(cab >0){
					valor = Constantes.COD_SECUENCIAL_EXISTE_INTF_CAB+"/"+
					        Constantes.SECUENCIAL_EXISTE_INTF_CAB;
					flag =false;
				 }		
			}
			if(flag){
				 Ejecutora e = new Ejecutora();
				 e.setAnoEje(i.getAnoEje()); 
				 int  anoEje  = maestroDetalleDao.verificarAnoEje(e);				
				 if(anoEje ==0){
					 valor = Constantes.COD_ANO_EJE_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.ANO_EJE_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}
			if(flag){
				 Ejecutora e = new Ejecutora();
				 e.setSecEjec(i.getSecEjec()); 
			     int  secEje  = maestroDetalleDao.verificarSecEje(e);				
				 if(secEje==0){
					 valor = Constantes.COD_SEC_EJEC_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.SEC_EJEC_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}			
			if(flag){
				 MaestroDocumento m = new MaestroDocumento();
				 m.setCodDoc(i.getCodDoc()); 
				 int  codDoc  = maestroDocumentoDao.verificarCodDoc(m); 				
				 if(codDoc==0){
					 valor = Constantes.COD_COD_DOC_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.COD_DOC_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}
			if(flag){					
				 if(!validarEstadoE(i.getUeEnvio())){ 					
					 valor = Constantes.COD_UE_ENVIO_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.UE_ENVIO_NO_EXISTE_INTF_CAB;
					 flag =false;					
				 }	 
			}			
			if(flag){				
				 if(!validarEstadoES(i.getUeEstado())){  
					 valor = Constantes.COD_UE_ESTADO_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.UE_ESTADO_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}
			
			 /*VALIDACION DE CAMPOS DE INTF_DET09 I-D REBAJA**/
			for(IntfDet09 d :detLista){
				if(flag){
					 int  det  = intfDet09Dao.verificarSecuencialDet09(d);
					 if(det >0 && flag){
						 valor = Constantes.COD_SECUENCIAL_EXISTE_INTF_DET09+"/"+
						         Constantes.SECUENCIAL_EXISTE_INTF_DET09;
						 flag =false;
						 break;
					 }	 
				 }
				 if(flag){				
					 if(!i.getSecuencial().equals(d.getSecuencial())){
						 valor = Constantes.COD_SECUENCIAL_NO_COINCIDE_INTF_DET09+"/"+
						         Constantes.SECUENCIAL_NO_COINCIDE_INTF_DET09;
						 flag =false;
						 break;
					 }	 
				 }
				 if(flag){
					 MaestroClasificador m = new MaestroClasificador();
					 m.setIdClasifi(d.getIdClasifi()); 
					 int  idClasifi  = maestroClasificadorDao.verificarIdClasifi(m);		
					 if(idClasifi==0){
						 valor = Constantes.COD_ID_CLASIFI_NO_EXISTE_INTF_DET09+"/"+
						         Constantes.ID_CLASIFI_NO_EXISTE_INTF_DET09;
						 flag =false;
						 break;
					 }	 
				} 	
			   if(flag){
					 MaestroClasificador m = new MaestroClasificador();
					 m.setAnoEje(i.getAnoEje());
					 m.setClasificad(d.getClasifniv1()+d.getClasifniv2()+
							 " "+d.getClasifniv3()+" "+d.getClasifniv4()+
							 " "+d.getClasifniv5()+" "+d.getClasifniv6());
					 int  nivClasificad  = maestroClasificadorDao.verificarNivClasifi(m);		
					 if(nivClasificad==0){
						 valor = Constantes.COD_CLASIFNIVELES_NO_EXISTE_INTF_DET09+"/"+
						         Constantes.CLASIFNIVELES_NO_EXISTE_INTF_DET09;
						 flag =false;
						 break;
					 }					
				}			   
			}//fin del for	
			if(flag){				
				List<ExpedienteIngreso> expeMonto = expedienteIngresoDao.bucarMontoTotalDeterminado(exp);
				logger.info("Monto Total determinado por rebaja :  "+montoTotal); 
				logger.info("Monto Total determinado por rebaja expediente:  "+expeMonto.get(0).getMonto()); 
				if(expeMonto.get(0).getMonto()<=montoTotal){ 
					valor = Constantes.COD_MONTO_DET09_MAYOR_MONTOINGRESO+"/"+
					        Constantes.MONTO_DET09_MAYOR_MONTOINGRESO;
					flag =false;				
				}	 
			} 
			if(flag){				
				List<ExpedienteIngreso> expeMontoMn = expedienteIngresoDao.bucarMontoMnTotalDeterminado(exp);
				logger.info("Monto Mn Total determinado por rebaja :  "+montoMnTotal); 
				logger.info("Monto MN Total determinado por rebaja expediente:  "+expeMontoMn.get(0).getMontoNaci());
				if(expeMontoMn.get(0).getMontoNaci()<=montoMnTotal){ 
					valor = Constantes.COD_MONTOMN_DET09_MAYOR_MONTOINGRESO+"/"+
					        Constantes.MONTOMN_DET09_MAYOR_MONTOINGRESO;
					flag =false;				
				}	 
			} 		
		} catch (Exception e) {				
			logger.info("Error validar determinado rebaja "+e); 
			valor = CODIGO_VERIFICACION_ERROR+"/"+"";
		}		 
		 return valor;
	}
	
	
    @Override
	public String validarIngresosDAnulXError(Map<String, Object> params) throws Exception {
		 String  valor  = CODIGO_VERIFICACION_OK+"/"+""; 
		 boolean flag = true;
		 try {
			 IntfCab i = (IntfCab) params.get("intfCab");   
		     @SuppressWarnings("unchecked")
			 List<IntfDet09> detLista = (List<IntfDet09>) params.get("listaDet");
		     double montoTotal = (Double)params.get("montoTotal")*(-1);
		     double montoMnTotal = (Double)params.get("montoMnTotal")*(-1);
			 /*VALIDACION DE CAMPOS DE INTF_CAB I-D ANULACION Y ANULACION POR ERROR**/
			 ExpedienteIngreso exp = new ExpedienteIngreso();
			 exp.setExpediente(i.getIntfExp()); 
			 exp.setFase(i.getIntfFase());
			 exp.setCorrelativ(i.getIntfCor());
			 exp.setSecuencia(i.getIntfSec());
			 exp.setAnoEje(i.getAnoEje());		 
			 exp.setCiclo(i.getCiclo()); 			 
			 
			 if(flag){				
				 int expeIngreso = expedienteIngresoDao.verificarExiteExpIngreso(exp);				
				 if(expeIngreso==0){ 
					 valor = Constantes.COD_EXISTE_DETERMINADO_PARA_ANULACION+"/"+
					         Constantes.EXISTE_DETERMINADO_PARA_ANULACION;
					 flag =false;
				 }	 
			 }			
			if(flag){
				 int  cab = intfCabDao.verificarSecuencialCab(i);
				 if(cab >0){
					valor = Constantes.COD_SECUENCIAL_EXISTE_INTF_CAB+"/"+
					        Constantes.SECUENCIAL_EXISTE_INTF_CAB;
					flag =false;
				 }		
			}
			if(flag){
				 Ejecutora e = new Ejecutora();
				 e.setAnoEje(i.getAnoEje()); 
				 int  anoEje  = maestroDetalleDao.verificarAnoEje(e);				
				 if(anoEje ==0){
					 valor = Constantes.COD_ANO_EJE_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.ANO_EJE_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}
			if(flag){
				 Ejecutora e = new Ejecutora();
				 e.setSecEjec(i.getSecEjec()); 
			     int  secEje  = maestroDetalleDao.verificarSecEje(e);				
				 if(secEje==0){
					 valor = Constantes.COD_SEC_EJEC_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.SEC_EJEC_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}			
			if(flag){
				 MaestroDocumento m = new MaestroDocumento();
				 m.setCodDoc(i.getCodDoc()); 
				 int  codDoc  = maestroDocumentoDao.verificarCodDoc(m); 				
				 if(codDoc==0){
					 valor = Constantes.COD_COD_DOC_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.COD_DOC_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}
			if(flag){					
				 if(!validarEstadoE(i.getUeEnvio())){ 					
					 valor = Constantes.COD_UE_ENVIO_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.UE_ENVIO_NO_EXISTE_INTF_CAB;
					 flag =false;					
				 }	 
			}			
			if(flag){				
				 if(!validarEstadoES(i.getUeEstado())){  
					 valor = Constantes.COD_UE_ESTADO_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.UE_ESTADO_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}
			
			 /*VALIDACION DE CAMPOS DE INTF_DET09 I-D ANULACION y ANULACION POR ERROR**/
			for(IntfDet09 d :detLista){
				 if(flag){
					 int  det  = intfDet09Dao.verificarSecuencialDet09(d);
					 if(det >0 && flag){
						 valor = Constantes.COD_SECUENCIAL_EXISTE_INTF_DET09+"/"+
						         Constantes.SECUENCIAL_EXISTE_INTF_DET09;
						 flag =false;
						 break;
					 }	 
				 }
				 if(flag){				
					 if(!i.getSecuencial().equals(d.getSecuencial())){
						 valor = Constantes.COD_SECUENCIAL_NO_COINCIDE_INTF_DET09+"/"+
						         Constantes.SECUENCIAL_NO_COINCIDE_INTF_DET09;
						 flag =false;
						 break;
					 }	 
				 }
				 if(flag){
					 MaestroClasificador m = new MaestroClasificador();
					 m.setIdClasifi(d.getIdClasifi()); 
					 int  idClasifi  = maestroClasificadorDao.verificarIdClasifi(m);		
					 if(idClasifi==0){
						 valor = Constantes.COD_ID_CLASIFI_NO_EXISTE_INTF_DET09+"/"+
						         Constantes.ID_CLASIFI_NO_EXISTE_INTF_DET09;
						 flag =false;
						 break;
					 }	 
				} 	
			   if(flag){
					 MaestroClasificador m = new MaestroClasificador();
					 m.setAnoEje(i.getAnoEje());
					 m.setClasificad(d.getClasifniv1()+d.getClasifniv2()+
							 " "+d.getClasifniv3()+" "+d.getClasifniv4()+
							 " "+d.getClasifniv5()+" "+d.getClasifniv6());
					 int  nivClasificad  = maestroClasificadorDao.verificarNivClasifi(m);		
					 if(nivClasificad==0){
						 valor = Constantes.COD_CLASIFNIVELES_NO_EXISTE_INTF_DET09+"/"+
						         Constantes.CLASIFNIVELES_NO_EXISTE_INTF_DET09;
						 flag =false;
						 break;
					 }					
				}			   
			}//fin del for	
			if(flag){				
				 List<ExpedienteIngreso> expeMonto = expedienteIngresoDao.bucarMontoTotalDeterminado(exp);
				 logger.info("Monto Total determinado anulacion y x error:  "+montoTotal); 
				 logger.info("Monto Total determinado anulacion y x error expediente :  "+expeMonto.get(0).getMonto()); 
				 if(expeMonto.get(0).getMonto()!=montoTotal){ 
					 valor = Constantes.COD_MONTO_DET09_MAYOR_MONTOINGRESO+"/"+
					         Constantes.MONTO_DET09_MAYOR_MONTOINGRESO;
					 flag =false;					
				 }	 
			}
			if(flag){				
				 List<ExpedienteIngreso> expeMontoMn = expedienteIngresoDao.bucarMontoMnTotalDeterminado(exp);
				 logger.info("Monto Mn Total determinado anulacion y x error:  "+montoMnTotal); 
				 logger.info("Monto Mn Total determinado anulacion y x error expediente:  "+expeMontoMn.get(0).getMontoNaci()); 
				 if(expeMontoMn.get(0).getMontoNaci()!=montoMnTotal){ 
					 valor = Constantes.COD_MONTOMN_DET09_MAYOR_MONTOINGRESO+"/"+
					         Constantes.MONTOMN_DET09_MAYOR_MONTOINGRESO;
					 flag =false;					
				 }	 
			} 	
		} catch (Exception e) {		
			logger.info("Error validar determinado anulacion y anulacion por error "+e); 
			valor = CODIGO_VERIFICACION_ERROR+"/"+"";
		}		 
		 return valor;
	}
	
	
	private boolean validarEstadoE(String cadena){
		boolean estado = false;
		if(ESTADO_ENVIO_P.equals(cadena)){
			estado= true;
		}else if(ESTADO_ENVIO_N.equals(cadena)){
		  estado = true;	
		}
		return estado;
	}
	
	private boolean validarEstadoES(String cadena){
		boolean estado = false;
		if(ESTADO_ENVIO_P.equals(cadena)){
			estado= true;
		}else if(ESTADO_ENVIO_N.equals(cadena)){
		    estado = true;	
		}else if(ESTADO_ENVIO_R.equals(cadena)){
		   estado = true;
		}
		return estado;
	}
	
	
	/*******VALIDACION PARA INGRESOS RECAUDADO (I-R)******/
	@Override	
	public String validarIngresosR(Map<String, Object> params) throws Exception {
		 String  valor  = CODIGO_VERIFICACION_OK+"/"+""; 
		 boolean flag = true;
		 try {
			 IntfCab i = (IntfCab) params.get("intfCab");   
		     @SuppressWarnings("unchecked")
			 List<IntfDet09> detLista = (List<IntfDet09>) params.get("listaDet");			 
			 IntfNot n = (IntfNot) params.get("intfNot");
			 
			 /**VALIDACION DE CAMPOS DE INTF_CAB**/			 
			 /*VALIDACION PARA VERIFICAR SI EXITE EL DETERMINADO CASO 
			  * CONTRARIO NO SE PUEDE HACER UN RECAUDADO**/
			 ExpedienteIngreso exp = new ExpedienteIngreso();
			 exp.setExpediente(i.getIntfExp()); 
			 exp.setFase(i.getIntfFase());
			 exp.setCorrelativ(i.getIntfCor());
			 exp.setSecuencia(i.getIntfSec()); 
			 exp.setAnoEje(i.getAnoEje()); 
			 exp.setCiclo(i.getCiclo());
			 
			if(flag){				
				 int expeIngreso = expedienteIngresoDao.verificarExiteExpIngreso(exp);				
				 if(expeIngreso==0){ 
					 valor = Constantes.COD_EXISTE_EXP_INGRESO+"/"+
					         Constantes.EXISTE_EXP_INGRESO;
					 flag =false;
				 }	 
			} 
			if(flag){
				 int  cab = intfCabDao.verificarSecuencialCab(i);
				 if(cab>0){ 
					valor = Constantes.COD_SECUENCIAL_EXISTE_INTF_CAB+"/"+
					        Constantes.SECUENCIAL_EXISTE_INTF_CAB;
					flag =false;
				 }		 
			}			 	
			if(flag){
				 Ejecutora e = new Ejecutora();
				 e.setAnoEje(i.getAnoEje()); 
				 int  anoEje  = maestroDetalleDao.verificarAnoEje(e);				
				 if(anoEje ==0){
					 valor = Constantes.COD_ANO_EJE_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.ANO_EJE_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	
			}	
			if(flag){			
				 Ejecutora e = new Ejecutora();
				 e.setSecEjec(i.getSecEjec()); 
				 int  secEje  = maestroDetalleDao.verificarSecEje(e);				
				 if(secEje==0){
					 valor = Constantes.COD_SEC_EJEC_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.SEC_EJEC_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}		
			if(flag){
				 MaestroDocumento m = new MaestroDocumento();
				 m.setCodDoc(i.getCodDoc()); 
				 int  codDoc  = maestroDocumentoDao.verificarCodDoc(m); 				
				 if(codDoc==0){
					 valor = Constantes.COD_COD_DOC_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.COD_DOC_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }			
			}
			if(flag){
				 Origen o = new Origen();
				 o.setOrigen(i.getOrigen());
				 int origen  = origenDao.verificarOrigen(o);	
				 if(origen==0){
					 valor = Constantes.COD_ORIGEN_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.ORIGEN_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}
			if(flag){
				FuenteFinanc f = new FuenteFinanc();
				 f.setFuenteFin(i.getFteFin()); 
				 int  fteFin  = fuenteFinancDao.verificarFteFin(f);	
				 if(fteFin==0){
					 valor = Constantes.COD_FTE_FIN_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.FTE_FIN_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}				
			if(flag){
				 MaestroDetalle m = new MaestroDetalle();
				 m.setCodDetall(i.gettPago()); 
				 int  tPago  = maestroDetalleDao.verificarTPago(m);			
				 if(tPago==0){
					 valor = Constantes.COD_T_PAGO_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.T_PAGO_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}
			if(flag){
				 MaestroDetalle m = new MaestroDetalle();
				 m.setCodDetall(i.gettRecurs()); 
				 int  tRecurs  = maestroDetalleDao.verificarTRecurs(m);			
				 if(tRecurs==0){
					 valor = Constantes.COD_T_RECURS_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.T_RECURS_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}
			if(flag){
				 MaestroDetalle m = new MaestroDetalle();
				 m.setCodDetall(i.gettCompro()); 
				 int  tCompro  = maestroDetalleDao.verificarTCompro(m);		
				 if(tCompro==0){
					 valor = Constantes.COD_T_COMPRO_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.T_COMPRO_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}			
			if(flag){
				 CtaCte c = new CtaCte();
				 c.setAnoEje(i.getAnoCta());  
				 int  ctacte  = ctaCteDao.verificarAnoCta(c);	
				 if(ctacte==0){
					 valor = Constantes.COD_ANO_CTA_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.ANO_CTA_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}		
			if(flag){
				 Banco b = new Banco();
				 b.setBanco(i.getBanco()); 
				 int banco  = bancoDao.verificarBanco(b);		
				 if(banco==0){
					 valor = Constantes.COD_BANCO_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.BANCO_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}
			if(flag){
				 CtaCte c = new CtaCte();
				 c.setCtaCte(i.getCtaCte()); 
				 int  ctacte  = ctaCteDao.verificarCtaCte(c);		
				 if(ctacte==0){
					 valor = Constantes.COD_CTA_CTE_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.CTA_CTE_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}		
			if(flag){
				 MaestroDetalle m = new MaestroDetalle();
				 m.setCodDetall(i.getMoneda()); 
				 int  moneda  = maestroDetalleDao.verificarMoneda(m);		
				 if(moneda==0){
					 valor = Constantes.COD_MONEDA_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.MONEDA_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}
			if(flag){
				 MaestroDocumento m = new MaestroDocumento();
				 m.setCodDoc(i.getDcodDoc()); 
				 int  codDoc  = maestroDocumentoDao.verificarCodDoc(m); 				
				 if(codDoc==0){
					 valor = Constantes.COD_DCOD_DOC_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.DCOD_DOC_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }			
			}
			if(flag){					
				 if(!validarEstadoE(i.getUeEnvio())){ 					
					 valor = Constantes.COD_UE_ENVIO_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.UE_ENVIO_NO_EXISTE_INTF_CAB;
					 flag =false;					
				 }	 
			}			
			if(flag){				
				 if(!validarEstadoES(i.getUeEstado())){  
					 valor = Constantes.COD_UE_ESTADO_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.UE_ESTADO_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}			
			/*if(flag){
				 Expediente e = new Expediente();
				 e.setExpediente(i.getIntfExp()); 
				 int  intfExp  = maestroDetalleDao.verificarintfExp(e);		
				 if(intfExp==0){
					 valor = Constantes.INFT_EXP_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}
			//valida que exista el ingreso determinado
			if(flag){				
				 if(!Constantes.DETERMINADO.equals(i.getIntfFase())){ 
					 valor = Constantes.INFT_FASE_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}
			if(flag){
				 ExpedienteIngreso e = new ExpedienteIngreso();
				 e.setSecuencia(i.getIntfSec());
				 int  intfsec  = maestroDetalleDao.verificarSecuencialExpe(e);	
				 if(intfsec==0){
					 valor = Constantes.INFT_SEC_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			} 	 
			if(flag){
				 ExpedienteIngreso e = new ExpedienteIngreso();
				 e.setCorrelativ(i.getIntfCor());
				 int  intfCor  = maestroDetalleDao.verificarCorrelativExpe(e);	
				 if(intfCor==0){
					 valor = Constantes.INFT_COR_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			} 	*/
			
			//falta estado_reg
			 
			 /**VALIDACION DE CAMPOS DE INTF_DET09**/
			for(IntfDet09 d :detLista){
				 if(flag){
					 int  det  = intfDet09Dao.verificarSecuencialDet09(d);
					 if(det >0 && flag){
						 valor = Constantes.COD_SECUENCIAL_EXISTE_INTF_DET09+"/"+
						         Constantes.SECUENCIAL_EXISTE_INTF_DET09;
						 flag =false;
						 break;
					 }	 
				 }
				 if(flag){				
					 if(!i.getSecuencial().equals(d.getSecuencial())){
						 valor = Constantes.COD_SECUENCIAL_NO_COINCIDE_INTF_DET09+"/"+
						         Constantes.SECUENCIAL_NO_COINCIDE_INTF_DET09;
						 flag =false;
						 break;
					 }	 
				 }
				 if(flag){
					 MaestroClasificador m = new MaestroClasificador();
					 m.setIdClasifi(d.getIdClasifi()); 
					 int  idClasifi  = maestroClasificadorDao.verificarIdClasifi(m);		
					 if(idClasifi==0){
						 valor = Constantes.COD_ID_CLASIFI_NO_EXISTE_INTF_DET09+"/"+
						         Constantes.ID_CLASIFI_NO_EXISTE_INTF_DET09;
						 flag =false;
						 break;
					 }				
				} 	
				if(flag){
					 MaestroClasificador m = new MaestroClasificador();
					 m.setAnoEje(i.getAnoEje());
					 m.setClasificad(d.getClasifniv1()+d.getClasifniv2()+
							 " "+d.getClasifniv3()+" "+d.getClasifniv4()+
							 " "+d.getClasifniv5()+" "+d.getClasifniv6());
					 int  nivClasificad  = maestroClasificadorDao.verificarNivClasifi(m);		
					 if(nivClasificad==0){
						 valor = Constantes.COD_CLASIFNIVELES_NO_EXISTE_INTF_DET09+"/"+
						         Constantes.CLASIFNIVELES_NO_EXISTE_INTF_DET09;
						 flag =false;
						 break;
					 }					
				} 		
			}//fin del for			
			 
			 /**VALIDACION DE CAMPOS DE INTF_NOT**/
			 if(flag){
				 int  not  = intfNotDao.verificarSecuencialNot(n);
				 if(not >0 && flag){
					 valor = Constantes.COD_SECUENCIAL_EXISTE_INTF_NOT+"/"+
					         Constantes.SECUENCIAL_EXISTE_INTF_NOT;
					 flag =false;
				 }	 
			 }
			 if(flag){				
				 if(!n.getSecuencial().equals(i.getSecuencial())){
					 valor = Constantes.COD_SECUENCIAL_NO_COINCIDE_INTF_NOT+"/"+
					         Constantes.SECUENCIAL_NO_COINCIDE_INTF_NOT;
					 flag =false;
				 }	 
			 }
			 if(flag){
				 ExpedienteIngreso e = new ExpedienteIngreso();
				 e.setCorrelativ(n.getCorrelativ());
				 int  idClasifi  = maestroDetalleDao.verificarCorrelativExpe(e);	
				 if(idClasifi==0){
					 valor = Constantes.COD_CORRELATIV_NO_EXISTE_INTF_NOT+"/"+
					         Constantes.CORRELATIV_NO_EXISTE_INTF_NOT;
					 flag =false;
				 }	 
			} 	 
		} catch (Exception e) {			
			logger.info("Error al listar secuencial de la cab"+e); 
			valor = CODIGO_VERIFICACION_ERROR+"/"+"";
		}		 
		 return valor;
	}
	
	@Override
	public String validarIngresosRAnulXError(Map<String, Object> params) throws Exception {
		 String  valor  = CODIGO_VERIFICACION_OK+"/"+""; 
		 boolean flag = true;
		 try {
			 IntfCab i = (IntfCab) params.get("intfCab");   
		     @SuppressWarnings("unchecked")
			 List<IntfDet09> detLista = (List<IntfDet09>) params.get("listaDet");	
		     double montoTotal = (Double)params.get("montoTotal")*(-1);
		     double montoMnTotal = (Double)params.get("montoMnTotal")*(-1);
			 /*VALIDACION DE CAMPOS DE INTF_CAB I-D ANULACION Y ANULACION POR ERROR**/
			 ExpedienteIngreso exp = new ExpedienteIngreso();
			 exp.setExpediente(i.getIntfExp()); 
			 exp.setFase(i.getIntfFase());
			 exp.setCorrelativ(i.getIntfCor());
			 exp.setSecuencia(i.getIntfSec()); 
			 exp.setAnoEje(i.getAnoEje()); 
			 exp.setCiclo(i.getCiclo()); 			 
			 
			 if(flag){				
				 int expeIngreso = expedienteIngresoDao.verificarExiteExpIngreso(exp);				
				 if(expeIngreso==0){ 
					 valor = Constantes.COD_EXISTE_RECAUDADO_PARA_ANULACION+"/"+
					         Constantes.EXISTE_RECAUDADO_PARA_ANULACION;
					 flag =false;
				 }	 
			}	 
			/* 
			 int valorExp = expedienteIngresoDao.verificarExpedienteDA(exp);//numero de expediente			 
			 if(valorExp==0){
				valor = Constantes.INFT_EXP_AMP_NO_EXISTE_INTF_CAB;
				flag =false; 
			 }			 
			 if(flag){
				 int valorfase = expedienteIngresoDao.verificarFaseDA(exp);	
				 if(valorfase==0){
					 valor = Constantes.FASE_AMP_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}
			if(flag){
				 int valorSec = expedienteIngresoDao.verificarSecuenciaDA(exp);	
				 if(valorSec==0){
					 valor = Constantes.SECUENCIAL_AMP_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}
			if(flag){
				 int valorCorr = expedienteIngresoDao.verificarCorrelativoDA(exp);	
				 if(valorCorr==0){
					 valor = Constantes.CORRELA_AMP_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}*/
			if(flag){
				 int  cab = intfCabDao.verificarSecuencialCab(i);
				 if(cab >0){
					valor = Constantes.COD_SECUENCIAL_EXISTE_INTF_CAB+"/"+
					        Constantes.SECUENCIAL_EXISTE_INTF_CAB;
					flag =false;
				 }		
			}
			if(flag){
				 Ejecutora e = new Ejecutora();
				 e.setAnoEje(i.getAnoEje()); 
				 int  anoEje  = maestroDetalleDao.verificarAnoEje(e);				
				 if(anoEje ==0){
					 valor = Constantes.COD_ANO_EJE_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.ANO_EJE_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}
			if(flag){
				 Ejecutora e = new Ejecutora();
				 e.setSecEjec(i.getSecEjec()); 
			     int  secEje  = maestroDetalleDao.verificarSecEje(e);				
				 if(secEje==0){
					 valor = Constantes.COD_SEC_EJEC_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.SEC_EJEC_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}
			/*if(flag){
				 Ciclo c = new Ciclo();
				 c.setCiclo(i.getCiclo()); 
				 int  ciclo  = cicloDao.verificarCiclo(c);		
				 if(ciclo==0){
					 valor = Constantes.CICLO_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}
			if(flag){
				 Fase f = new Fase(); 
				 f.setFase(i.getFase());
				 int  fase  = faseDao.verificarFase(f);		
				 if(fase==0){
					 valor = Constantes.FASE_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}*/
			if(flag){
				 MaestroDocumento m = new MaestroDocumento();
				 m.setCodDoc(i.getCodDoc()); 
				 int  codDoc  = maestroDocumentoDao.verificarCodDoc(m); 				
				 if(codDoc==0){
					 valor = Constantes.COD_COD_DOC_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.COD_DOC_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}
			if(flag){
				 Mes m = new Mes();
				 m.setMesEje(i.getMesEje()); 
				 int  mesEje  = maestroDetalleDao.verificarMesEje(m);				
				 if(mesEje ==0){
					 valor = Constantes.COD_MES_EJE_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.MES_EJE_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}
			if(flag){					
				 if(!validarEstadoE(i.getUeEnvio())){ 					
					 valor = Constantes.COD_UE_ENVIO_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.UE_ENVIO_NO_EXISTE_INTF_CAB;
					 flag =false;					
				 }	 
			}			
			if(flag){				
				 if(!validarEstadoES(i.getUeEstado())){  
					 valor = Constantes.COD_UE_ESTADO_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.UE_ESTADO_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}
			
			 /*VALIDACION DE CAMPOS DE INTF_DET09 I-D ANULACION y ANULACION POR ERROR**/
			for(IntfDet09 d :detLista){
				 if(flag){
					 int  det  = intfDet09Dao.verificarSecuencialDet09(d);
					 if(det >0 && flag){
						 valor = Constantes.COD_SECUENCIAL_EXISTE_INTF_DET09+"/"+
						         Constantes.SECUENCIAL_EXISTE_INTF_DET09;
						 flag =false;
						 break;
					 }	 
				 }
				 if(flag){				
					 if(!i.getSecuencial().equals(d.getSecuencial())){
						 valor = Constantes.COD_SECUENCIAL_NO_COINCIDE_INTF_DET09+"/"+
						         Constantes.SECUENCIAL_NO_COINCIDE_INTF_DET09;
						 flag =false;
						 break;
					 }	 
				 }
				 if(flag){
					 MaestroClasificador m = new MaestroClasificador();
					 m.setIdClasifi(d.getIdClasifi()); 
					 int  idClasifi  = maestroClasificadorDao.verificarIdClasifi(m);		
					 if(idClasifi==0){
						 valor = Constantes.COD_ID_CLASIFI_NO_EXISTE_INTF_DET09+"/"+
						         Constantes.ID_CLASIFI_NO_EXISTE_INTF_DET09;
						 flag =false;
						 break;
					 }	 
				} 	
			   if(flag){
					 MaestroClasificador m = new MaestroClasificador();
					 m.setAnoEje(i.getAnoEje());
					 m.setClasificad(d.getClasifniv1()+d.getClasifniv2()+
							 " "+d.getClasifniv3()+" "+d.getClasifniv4()+
							 " "+d.getClasifniv5()+" "+d.getClasifniv6());
					 int  nivClasificad  = maestroClasificadorDao.verificarNivClasifi(m);		
					 if(nivClasificad==0){
						 valor = Constantes.COD_CLASIFNIVELES_NO_EXISTE_INTF_DET09+"/"+
						         Constantes.CLASIFNIVELES_NO_EXISTE_INTF_DET09;
						 flag =false;
						 break;
					 }					
				}			   
			}//fin del for	
			if(flag){				
				 List<ExpedienteIngreso> expeMonto = expedienteIngresoDao.bucarMontoTotalDeterminado(exp);
				 logger.info("Monto Total recaudado anulacion y anulacion x error:  "+montoTotal); 
				 logger.info("Monto Total recaudado  anulacion y anulacion x error Expediente:  "+expeMonto.get(0).getMonto()); 
				 if(expeMonto.get(0).getMonto()!=montoTotal){ 
					 valor = Constantes.COD_MONTO_DET09_MAYOR_MONTOINGRESO+"/"+
					         Constantes.MONTO_DET09_MAYOR_MONTOINGRESO;
					 flag =false;					 
				 }	 
			}
			if(flag){				
				 List<ExpedienteIngreso> expeMontoMn = expedienteIngresoDao.bucarMontoMnTotalDeterminado(exp);
				 logger.info("Monto Mn Total recaudado anulacion y anulacion x error:  "+montoMnTotal); 
				 logger.info("Monto Mn Total recaudado anulacion y anulacion x error Expediente:  "+expeMontoMn.get(0).getMontoNaci()); 
				 if(expeMontoMn.get(0).getMontoNaci()!=montoMnTotal){ 
					 valor = Constantes.COD_MONTOMN_DET09_MAYOR_MONTOINGRESO+"/"+
					         Constantes.MONTOMN_DET09_MAYOR_MONTOINGRESO;
					 flag =false;					 
				 }	 
			} 	
		} catch (Exception e) {			
			logger.info("Error validar recaudado anulacion y anulacion por error "+e); 
			valor = CODIGO_VERIFICACION_ERROR+"/"+"";
		}		 
		 return valor;
	}
	
	
	@Override
	public String validarIngresosRRebaja(Map<String, Object> params) throws Exception {
		 String  valor  = CODIGO_VERIFICACION_OK+"/"+""; 
		 boolean flag = true;
		 try {
			 IntfCab i = (IntfCab) params.get("intfCab");   
		     @SuppressWarnings("unchecked")
			 List<IntfDet09> detLista = (List<IntfDet09>) params.get("listaDet");	
		     double montoTotal = (Double)params.get("montoTotal")*(-1);
		     double montoMnTotal = (Double)params.get("montoMnTotal")*(-1);
			 /*VALIDACION DE CAMPOS DE INTF_CAB I-D POR REBAJA**/
			 ExpedienteIngreso exp = new ExpedienteIngreso();
			 exp.setExpediente(i.getIntfExp()); 
			 exp.setFase(i.getIntfFase());
			 exp.setCorrelativ(i.getIntfCor());
			 exp.setSecuencia(i.getIntfSec()); 
			 exp.setAnoEje(i.getAnoEje()); 
			 exp.setCiclo(i.getCiclo()); 	
			 
			 if(flag){				
				 int expeIngreso = expedienteIngresoDao.verificarExiteExpIngreso(exp);				
				 if(expeIngreso==0){ 
					 valor = Constantes.COD_EXISTE_RECAUDADO_PARA_REBAJA+"/"+
					         Constantes.EXISTE_RECAUDADO_PARA_REBAJA;
					 flag =false;
				 }	 
			}			 
			/* 
			 int valorExp = expedienteIngresoDao.verificarExpedienteDA(exp);			 
			 if(valorExp==0){
				valor = Constantes.INFT_EXP_AMP_NO_EXISTE_INTF_CAB;
				flag =false; 
			 }			 
			 if(flag){
				 int valorfase = expedienteIngresoDao.verificarFaseDA(exp);	
				 if(valorfase==0){
					 valor = Constantes.FASE_AMP_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}
			if(flag){
				 int valorSec = expedienteIngresoDao.verificarSecuenciaDA(exp);	
				 if(valorSec==0){
					 valor = Constantes.SECUENCIAL_AMP_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}
			if(flag){
				 int valorCorr = expedienteIngresoDao.verificarCorrelativoDA(exp);	
				 if(valorCorr==0){
					 valor = Constantes.CORRELA_AMP_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}*/
			if(flag){
				 int  cab = intfCabDao.verificarSecuencialCab(i);
				 if(cab >0){
					valor = Constantes.COD_SECUENCIAL_EXISTE_INTF_CAB+"/"+
					        Constantes.SECUENCIAL_EXISTE_INTF_CAB;
					flag =false;
				 }		
			}
			if(flag){
				 Ejecutora e = new Ejecutora();
				 e.setAnoEje(i.getAnoEje()); 
				 int  anoEje  = maestroDetalleDao.verificarAnoEje(e);				
				 if(anoEje ==0){
					 valor = Constantes.COD_ANO_EJE_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.ANO_EJE_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}
			if(flag){
				 Ejecutora e = new Ejecutora();
				 e.setSecEjec(i.getSecEjec()); 
			     int  secEje  = maestroDetalleDao.verificarSecEje(e);				
				 if(secEje==0){
					 valor = Constantes.COD_SEC_EJEC_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.SEC_EJEC_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}
			/*if(flag){
				 Ciclo c = new Ciclo();
				 c.setCiclo(i.getCiclo()); 
				 int  ciclo  = cicloDao.verificarCiclo(c);		
				 if(ciclo==0){
					 valor = Constantes.CICLO_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}
			if(flag){
				 Fase f = new Fase(); 
				 f.setFase(i.getFase());
				 int  fase  = faseDao.verificarFase(f);		
				 if(fase==0){
					 valor = Constantes.FASE_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}*/
			if(flag){
				 MaestroDocumento m = new MaestroDocumento();
				 m.setCodDoc(i.getCodDoc()); 
				 int  codDoc  = maestroDocumentoDao.verificarCodDoc(m); 				
				 if(codDoc==0){
					 valor = Constantes.COD_COD_DOC_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.COD_DOC_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}
			if(flag){
				 Mes m = new Mes();
				 m.setMesEje(i.getMesEje()); 
				 int  mesEje  = maestroDetalleDao.verificarMesEje(m);				
				 if(mesEje ==0){
					 valor = Constantes.COD_MES_EJE_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.MES_EJE_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}
			if(flag){					
				 if(!validarEstadoE(i.getUeEnvio())){ 					
					 valor = Constantes.COD_UE_ENVIO_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.UE_ENVIO_NO_EXISTE_INTF_CAB;
					 flag =false;					
				 }	 
			}			
			if(flag){				
				 if(!validarEstadoES(i.getUeEstado())){  
					 valor = Constantes.COD_UE_ESTADO_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.UE_ESTADO_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}
			
			 /*VALIDACION DE CAMPOS DE INTF_DET09 I-D POR REBAJA**/
			for(IntfDet09 d :detLista){
				if(flag){
					 int  det  = intfDet09Dao.verificarSecuencialDet09(d);
					 if(det >0 && flag){
						 valor = Constantes.COD_SECUENCIAL_EXISTE_INTF_DET09+"/"+
						         Constantes.SECUENCIAL_EXISTE_INTF_DET09;
						 flag =false;
						 break;
					 }	 
				 }
				 if(flag){				
					 if(!i.getSecuencial().equals(d.getSecuencial())){
						 valor = Constantes.COD_SECUENCIAL_NO_COINCIDE_INTF_DET09+"/"+
						         Constantes.SECUENCIAL_NO_COINCIDE_INTF_DET09;
						 flag =false;
						 break;
					 }	 
				 }
				 if(flag){
					 MaestroClasificador m = new MaestroClasificador();
					 m.setIdClasifi(d.getIdClasifi()); 
					 int  idClasifi  = maestroClasificadorDao.verificarIdClasifi(m);		
					 if(idClasifi==0){
						 valor = Constantes.COD_ID_CLASIFI_NO_EXISTE_INTF_DET09+"/"+
						         Constantes.ID_CLASIFI_NO_EXISTE_INTF_DET09;
						 flag =false;
						 break;
					 }	 
				} 	
			   if(flag){
					 MaestroClasificador m = new MaestroClasificador();
					 m.setAnoEje(i.getAnoEje());
					 m.setClasificad(d.getClasifniv1()+d.getClasifniv2()+
							 " "+d.getClasifniv3()+" "+d.getClasifniv4()+
							 " "+d.getClasifniv5()+" "+d.getClasifniv6());
					 int  nivClasificad  = maestroClasificadorDao.verificarNivClasifi(m);		
					 if(nivClasificad==0){
						 valor = Constantes.COD_CLASIFNIVELES_NO_EXISTE_INTF_DET09+"/"+
						         Constantes.CLASIFNIVELES_NO_EXISTE_INTF_DET09;
						 flag =false;
						 break;
					 }					
				}		  
			}//fin del for	
			if(flag){				
				List<ExpedienteIngreso> expeMonto = expedienteIngresoDao.bucarMontoTotalDeterminado(exp);
				logger.info("Monto Total recaudado por rebaja :  "+montoTotal); 
				logger.info("Monto Total recaudado por rebaja expediente :  "+expeMonto.get(0).getMonto()); 
				if(expeMonto.get(0).getMonto()<=montoTotal){ 
					valor = Constantes.COD_MONTO_DET09_MAYOR_MONTOINGRESO+"/"+
					        Constantes.MONTO_DET09_MAYOR_MONTOINGRESO;
					flag =false;				
				}	 
			} 
			if(flag){				
				List<ExpedienteIngreso> expeMontoMn = expedienteIngresoDao.bucarMontoMnTotalDeterminado(exp);
				logger.info("Monto Mn Total recaudado por rebaja :  "+montoMnTotal); 
				logger.info("Monto Mn Total recaudado por rebaja expediente:  "+expeMontoMn.get(0).getMontoNaci()); 
				if(expeMontoMn.get(0).getMontoNaci()<=montoMnTotal){ 
					valor = Constantes.COD_MONTOMN_DET09_MAYOR_MONTOINGRESO+"/"+
					        Constantes.MONTOMN_DET09_MAYOR_MONTOINGRESO;
					flag =false;				
				}	 
			} 	
		} catch (Exception e) {		
			logger.info("Error validar recaudado por rebaja "+e); 
			valor = CODIGO_VERIFICACION_ERROR+"/"+"";
		}		 
		 return valor;
	}
	
	
	@Override
	public String validarIngresosRDevolucion(Map<String, Object> params) throws Exception {
		 String  valor  = CODIGO_VERIFICACION_OK+"/"+""; 
		 boolean flag = true;
		 try {
			 IntfCab i = (IntfCab) params.get("intfCab");   
		     @SuppressWarnings("unchecked")
			 List<IntfDet09> detLista = (List<IntfDet09>) params.get("listaDet");	
		     double montoTotal = (Double)params.get("montoTotal")*(-1);
		     double montoMnTotal = (Double)params.get("montoMnTotal")*(-1);
			 /*VALIDACION DE CAMPOS DE INTF_CAB I-D POR DEVOLUCION**/
			 ExpedienteIngreso exp = new ExpedienteIngreso();
			 exp.setExpediente(i.getIntfExp()); 
			 exp.setFase(i.getIntfFase());
			 exp.setCorrelativ(i.getIntfCor());
			 exp.setSecuencia(i.getIntfSec()); 
			 exp.setAnoEje(i.getAnoEje()); 
			 exp.setCiclo(i.getCiclo()); 			 
			 
			 if(flag){				
				 int expeIngreso = expedienteIngresoDao.verificarExiteExpIngreso(exp);				
				 if(expeIngreso==0){ 
					 valor = Constantes.COD_EXISTE_RECAUDADO_PARA_DEVOLUCION+"/"+
					         Constantes.EXISTE_RECAUDADO_PARA_DEVOLUCION;
					 flag =false;
				 }	 
			}		
			/* int valorExp = expedienteIngresoDao.verificarExpedienteDA(exp);			 
			 if(valorExp==0){
				valor = Constantes.INFT_EXP_AMP_NO_EXISTE_INTF_CAB;
				flag =false; 
			 }			 
			 if(flag){
				 int valorfase = expedienteIngresoDao.verificarFaseDA(exp);	
				 if(valorfase==0){
					 valor = Constantes.FASE_AMP_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}
			if(flag){
				 int valorSec = expedienteIngresoDao.verificarSecuenciaDA(exp);	
				 if(valorSec==0){
					 valor = Constantes.SECUENCIAL_AMP_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}
			if(flag){
				 int valorCorr = expedienteIngresoDao.verificarCorrelativoDA(exp);	
				 if(valorCorr==0){
					 valor = Constantes.CORRELA_AMP_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}*/
			if(flag){
				 int  cab = intfCabDao.verificarSecuencialCab(i);
				 if(cab >0){
					valor = Constantes.COD_SECUENCIAL_EXISTE_INTF_CAB+"/"+
					        Constantes.SECUENCIAL_EXISTE_INTF_CAB;
					flag =false;
				 }		
			}
			if(flag){
				 Ejecutora e = new Ejecutora();
				 e.setAnoEje(i.getAnoEje()); 
				 int  anoEje  = maestroDetalleDao.verificarAnoEje(e);				
				 if(anoEje ==0){
					 valor = Constantes.COD_ANO_EJE_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.ANO_EJE_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}
			if(flag){
				 Ejecutora e = new Ejecutora();
				 e.setSecEjec(i.getSecEjec()); 
			     int  secEje  = maestroDetalleDao.verificarSecEje(e);				
				 if(secEje==0){
					 valor = Constantes.COD_SEC_EJEC_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.SEC_EJEC_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}			
			if(flag){
				 MaestroDocumento m = new MaestroDocumento();
				 m.setCodDoc(i.getCodDoc()); 
				 int  codDoc  = maestroDocumentoDao.verificarCodDoc(m); 				
				 if(codDoc==0){
					 valor = Constantes.COD_COD_DOC_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.COD_DOC_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}
			if(flag){
				 Mes m = new Mes();
				 m.setMesEje(i.getMesEje()); 
				 int  mesEje  = maestroDetalleDao.verificarMesEje(m);				
				 if(mesEje ==0){
					 valor = Constantes.COD_MES_EJE_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.MES_EJE_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}
			if(flag){
				 MaestroDocumento m = new MaestroDocumento();
				 m.setCodDoc(i.getDcodDoc()); 
				 int  codDoc  = maestroDocumentoDao.verificarCodDoc(m); 				
				 if(codDoc==0){
					 valor = Constantes.COD_DCOD_DOC_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.DCOD_DOC_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }			
			}
			if(flag){					
				 if(!validarEstadoE(i.getUeEnvio())){ 					
					 valor = Constantes.COD_UE_ENVIO_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.UE_ENVIO_NO_EXISTE_INTF_CAB;
					 flag =false;					
				 }	 
			}			
			if(flag){				
				 if(!validarEstadoES(i.getUeEstado())){  
					 valor = Constantes.COD_UE_ESTADO_NO_EXISTE_INTF_CAB+"/"+
					         Constantes.UE_ESTADO_NO_EXISTE_INTF_CAB;
					 flag =false;
				 }	 
			}
			
			 /*VALIDACION DE CAMPOS DE INTF_DET09 I-D POR REBAJA**/
			for(IntfDet09 d :detLista){
				if(flag){
					 int  det  = intfDet09Dao.verificarSecuencialDet09(d);
					 if(det >0 && flag){
						 valor = Constantes.COD_SECUENCIAL_EXISTE_INTF_DET09+"/"+
						         Constantes.SECUENCIAL_EXISTE_INTF_DET09;
						 flag =false;
						 break;
					 }	 
				 }
				 if(flag){				
					 if(!i.getSecuencial().equals(d.getSecuencial())){
						 valor = Constantes.COD_SECUENCIAL_NO_COINCIDE_INTF_DET09+"/"+
						         Constantes.SECUENCIAL_NO_COINCIDE_INTF_DET09;
						 flag =false;
						 break;
					 }	 
				 }
				 if(flag){
					 MaestroClasificador m = new MaestroClasificador();
					 m.setIdClasifi(d.getIdClasifi()); 
					 int  idClasifi  = maestroClasificadorDao.verificarIdClasifi(m);		
					 if(idClasifi==0){
						 valor = Constantes.COD_ID_CLASIFI_NO_EXISTE_INTF_DET09+"/"+
						         Constantes.ID_CLASIFI_NO_EXISTE_INTF_DET09;
						 flag =false;
						 break;
					 }	 
				} 	
			   if(flag){
					 MaestroClasificador m = new MaestroClasificador();
					 m.setAnoEje(i.getAnoEje());
					 m.setClasificad(d.getClasifniv1()+d.getClasifniv2()+
							 " "+d.getClasifniv3()+" "+d.getClasifniv4()+
							 " "+d.getClasifniv5()+" "+d.getClasifniv6());
					 int  nivClasificad  = maestroClasificadorDao.verificarNivClasifi(m);		
					 if(nivClasificad==0){
						 valor = Constantes.COD_CLASIFNIVELES_NO_EXISTE_INTF_DET09+"/"+
						         Constantes.CLASIFNIVELES_NO_EXISTE_INTF_DET09;
						 flag =false;
						 break;
					 }					
				}			   
			}//fin del for
			if(flag){				
				List<ExpedienteIngreso> expeMonto = expedienteIngresoDao.bucarMontoTotalDeterminado(exp);
				logger.info("Monto Total recaudado por devolucion :  "+montoTotal); 
				logger.info("Monto  Total recaudado por devolucion expediente :  "+expeMonto.get(0).getMonto()); 
				if(expeMonto.get(0).getMonto() < montoTotal){ 
					valor = Constantes.COD_MONTO_DET09_MAYOR_MONTOINGRESO+"/"+
					        Constantes.MONTO_DET09_MAYOR_MONTOINGRESO;
					flag =false;				
				}	 
			}
			if(flag){				
				List<ExpedienteIngreso> expeMontoMn = expedienteIngresoDao.bucarMontoMnTotalDeterminado(exp);
				logger.info("Monto Mn Total recaudado por devolucion :  "+montoMnTotal); 
				logger.info("Monto Mn Total recaudado por devolucion expediente :  "+expeMontoMn.get(0).getMontoNaci()); 
				if(expeMontoMn.get(0).getMontoNaci() < montoMnTotal){ 
					valor = Constantes.COD_MONTOMN_DET09_MAYOR_MONTOINGRESO+"/"+
					        Constantes.MONTOMN_DET09_MAYOR_MONTOINGRESO;
					flag =false;				
				}	 
			} 	
		} catch (Exception e) {			
			logger.info("Error validar recaudado por devolucion "+e); 
			valor = CODIGO_VERIFICACION_ERROR+"/"+"";
		}		 
		 return valor;
	}
	
	/******VALIDACION DEL ESTADO DE CIERRE*******/
	@Override
	public String validarEstadoCierre(String anio,String secEjec,String secArea,String mes) throws Exception{		
		String valor =  Constantes.COD_ESTADO_CIERRE_DES+"/"+Constantes.ESTADO_CIERRE_DES;
		ControlCoa c = new ControlCoa();
		try {		
			c.setAnoCoa(anio);
			c.setSecEjec(secEjec);
			c.setSecArea(secArea);
			c.setMesCoa(mes);
			List<ControlCoa> lista = maestroDetalleDao.verificarEstadoCierre(c);
			for(ControlCoa v :lista){
				if(Constantes.ESTADO_CIERRE_APERTURADO.equals(v.getIndicador_())){ 
				  valor =CODIGO_VERIFICACION_OK+"/"+""; 	
				}
			}
		} catch (Exception e) {
			logger.info("Error al verificar estado de cierre"); 
			valor = CODIGO_VERIFICACION_ERROR+"/"+""; 
		}finally{
			if(c!=null)
			   c =null;
		}
		return valor;
	}
	
	
	

}
